Modern computer operating system have become quite capable and equally complex, with a great deal of interdependency between the various resources that are managed by the operating system. Such resource management can include task priority, the allocation of memory, distribution of programs and data between disk/main memory/cache, spooling, and many others. As a result, much effort has been put into getting the maximum performance out of a system by monitoring the system and adjusting various parameters to improve the performance parameters that are considered more important in that particular system In a related activity, application developers conduct similar optimization efforts to maximize performance in their application programs. These optimization efforts are generically known as system tuning.
Various types of analysis systems are used to implement system tuning. For example, software writers can collect data on an execution profile (describes where a software application spent time when it was run) by inserting programming code around detailed functions. This would enable the programmer to get a rough idea of time spent at a function level. However, this method would be very tedious for long, complicated long programs.
Another possibility may be using a tool instrument that compiles code. For example, many compilers have an option that the compiler may insert a timing routine before every program in the function to collect timing information on the program. However, this causes the program to run very slowly.
Another example includes commercial application such as Intel Corporation's VTUNE™. VTUNE™ is a complete visual tuning environment for Windows developers. VTUNE™ reports on central processing unit (CPU) statistics, including CPU time consumed for an application and for operating system components. In addition, greater levels of detail may also be seen. For example, VTUNE™ is capable of listing the application's functions and specific timing information related to each However, VTUNE™ does not allow for comparing and fixing programs run on two different systems.
As discussed above, the methods mentioned above do not currently allow for automatically prioritizing and analyzing performance data for one or more programs running on multiple systems. Prioritizing and analyzing performance data obtained by running the same software program on multiple systems is important to software developers, since this allows them to assess how changes in the system configuration will impact the software program's performance, and to assess how to modify the software program to improve its performance on multiple system configurations.